package priv.mill.hdfs.api;

import java.util.List;

import org.apache.hadoop.fs.FileStatus;

public interface HdfsApi {


	/**
	 * 列出路径下的文件名
	 * @param path
	 * @return
	 * @throws Exception
	 */
	List<String> listNames(String path) throws Exception;

	/**
	 * 获取路径下的文件信息
	 * @param path
	 * @return
	 * @throws Exception
	 */
	List<FileStatus> list(String path) throws Exception;

	/**
	 * 递归遍历路径下的文件
	 * @param path
	 * @param hdfsFileHandler
	 * @throws Exception
	 */
	void list(String path, HdfsFileHandler hdfsFileHandler) throws Exception;

	/**
	 * 创建文件夹
	 * @param path
	 * @return
	 * @throws Exception
	 */
	boolean mkdir(String path) throws Exception;
	
	/**
	 * 路径是否存在
	 * @param path
	 * @return
	 * @throws Exception
	 */
	boolean exists(String path) throws Exception;

	/**
	 * 从hdfs上读取一个文件的内容
	 * @param string
	 * @return
	 * @throws Exception
	 */
	byte[] get(String string) throws Exception;

	/**
	 * hdfs上创建一个文件
	 * @param path hdfs路径
	 * @param bytes 文件内容
	 * @throws Exception
	 */
	void createFile(String path, byte[] bytes)throws Exception;

	/**
	 * 上传本地文件到hdfs
	 * @param src 本地文件路径
	 * @param dist hdfs目标路径
	 * @throws Exception
	 */
	void put(String src, String dist) throws Exception;

	/**
	 * 删除文件
	 * @param path
	 * @return
	 * @throws Exception
	 */
	boolean delete(String path)throws Exception;

	/**
	 * 更名
	 * @param src
	 * @param dist
	 * @return 
	 * @throws Exception
	 */
	boolean rename(String src, String dist)throws Exception;

	/**
	 * 从hdfs下载文件
	 * @param hdfsPath
	 * @param localPath
	 * @throws Exception
	 */
	void getFile(String hdfsPath, String localPath)throws Exception;



}
